home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 15 / BBS in a box XV-2.iso / Files II / Prog / N-P / OOP for C.sit / OIC.ƒ / string.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-12-09  |  1.5 KB  |  103 lines  |  [TEXT/KAHL]

  1. /*    
  2.  *        String abstract class
  3.  *
  4.  *            Copyright © John Wainwright 1988
  5.  *
  6.  *    Superclasses:
  7.  *    
  8.  *    Purpose:
  9.  *
  10.  *    methods:
  11.  */
  12.  
  13. #include "oic.h"
  14. #include "generics.h"
  15.  
  16. class       String;
  17.  
  18. struct string_i
  19. {
  20.     char    *s_string;
  21. };
  22. typedef struct string_i string_i;
  23.  
  24. /* ------------------------- Instance methods ---------------------------- */
  25.  
  26. static string  
  27. _new(self, string, val)
  28.     object        self;
  29.     string_i    *string;
  30.     char        **val;
  31. {
  32.     char    *strcpy();
  33.  
  34.     string->s_string = strcpy(salloc(strlen(*val) + 1), *val);
  35.     return self;
  36. }
  37.  
  38. static char *
  39. _stringOf(self, string)
  40.     object        self;
  41.     string_i    *string;
  42. {
  43.     return string->s_string;
  44. }
  45.  
  46. static object
  47. _repList(self)
  48.     object    self;
  49. {
  50.     return copy(self);
  51. }
  52.  
  53. static object
  54. _copy(self, string)
  55.     object        self;
  56.     register string_i    *string;
  57. {
  58.     return New(String, string->s_string);
  59. }
  60.  
  61. static
  62. _print(self, string)
  63.     object        self;
  64.     string_i    *string;
  65. {
  66.     printf("%s\n", string->s_string);
  67. }
  68.  
  69. static
  70. _draw(self, string)
  71.     object        self;
  72.     string_i    *string;
  73. {
  74.     DrawString(CtoPstr(string->s_string));
  75. }
  76.  
  77. static
  78. _dispose(self, string)
  79.     object        self;
  80.     string_i    *string;
  81. {
  82.     free(string->s_string);
  83.     free(self);
  84. }
  85.  
  86. /* ------------------- Init the String class ------------------------------- */
  87.  
  88. _InitString()
  89. {
  90.     String = NewClass(sizeof(string_i), 0, "String", END);
  91.     AddMethods(String, 
  92.         newGeneric,            _new,
  93.         stringOfGeneric,    _stringOf,
  94.         repListGeneric,        _repList,
  95.         printGeneric,         _print,
  96.         copyGeneric,        _copy,
  97.         deepCopyGeneric,    _copy,
  98.         disposeGeneric,        _dispose,
  99.         deepDisposeGeneric,    _dispose,
  100.         END);
  101. }
  102.  
  103.